namespace mwk
{
	template<class T>
	class auto_ptr
	{
	private:
		T* _ptr;
	public:
		auto_ptr(T* ptr)
			:_ptr(ptr)
		{

		}

		~auto_ptr()
		{
			std::cout << "delete:" << ' ' << _ptr << std::endl;
			delete _ptr;
		}

		T operator* ()
		{
			return *_ptr;
		}

		T* operator-> ()
		{
			return _ptr;
		}

		auto_ptr(auto_ptr<T>& ap)
		{
			_ptr = ap._ptr;
			ap._ptr = nullptr;
		}

		auto_ptr<T>& operator= (auto_ptr<T>& ap)
		{
			this->_ptr = ap._ptr;
			ap._ptr = nullptr;
			return *this;
		}
	};
}